package com.dianping.abel.lock;

/**
 *
 * @author xiachao
 * @date 2019/2/13
 */
public abstract class AbstractCacheLock {

    /**
     * redis过期时间
     * 单位:秒 默认100秒
     */
    protected int expire;
    /**
     * 是否为自旋锁
     * 注意:如果线程获取锁后执行时间较长且线程间竞争较严重时
     * 则不适合使用自旋锁,否则会浪费CPU;在线程执行时间长但线程
     * 间竞争不严重时则需要平衡好自旋的周期以避免无谓的CPU消耗
     */
    protected boolean spinLock;
    /**
     * 自旋锁时间阈值
     * 单位:毫秒
     */
    protected long timeout = 10000000L;
    /**
     * 自旋周期
     * 单位:毫秒
     */
    protected long spinCycle = 10L;
    /**
     * 默认客户端标识
     * 在不区分客户端时使用
     */
    protected static final String DEFAULT_OWNER = "heaveneleven";

    public static abstract class BaseBuilder{
        public abstract DistributedLock build();
    }

    protected void setSpinCycle(long cycle){
        this.spinCycle = cycle;
    }
}
